package timing;


import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;


import com.itextpdf.text.DocumentException;

public class MyFrameStart extends JFrame {
	
	static Zadanie wybraneZadanie = null;	
	private static final String PlayString = "Play";
	private static final String PauseString = "Pauza";
	private static final String WszystkieString = "Wyświetl wszystkie zadania w systemie";
	private static final String DzisiejszeString = "Wyświetl tylko dzisiejsze zadania";
	
	// INTERFEJS
	final static JButton bStart = new JButton("Start");
	final static JTextField fName = new JTextField(20);	
	final static JButton bStop = new JButton("Stop");	
	final static JButton bStopStart = new JButton("Zakończ/zacznij");
	final static JButton bPauza = new JButton(PauseString);
	final static Zadanie otwarteZadanie = new Zadanie();
	
	final static JTextField fDayStatus = new JTextField(40);
	final static JTextArea tPrzebiegZadaniaDisplayArea = new JTextArea(5, 50);
	
	final static JList lZadaniaLocal = new JList(ModelZadan.listModelZadan);
	final static JButton bWyswietlMetryczke = new JButton("Wyświetl metryczkę");
	final static JTextArea tResultDisplay = new JTextArea(5, 50);

	final static JButton bWyswietlZadania = new JButton(WszystkieString);
	final static JButton bOpenGeneratePDF = new JButton("Wygeneruj i otwórz raport PDF");
	
	final static JLabel binPath = new JLabel();
	
	
	public MyFrameStart() {
		super("Timing App");
		setDefaultCloseOperation(MyFrameStart.EXIT_ON_CLOSE);
		setSize(700, 600);
		setLocation(50, 50);
		setLayout(new FlowLayout(FlowLayout.LEFT));
		setVisible(true);
		
		ustawOknoNaStart();
		

		JOptionPane.showMessageDialog(null, "test");
		//JOptionPane.showMessageDialog(null, "test", "Info", EXIT_ON_CLOSE);
		
		bWyswietlMetryczke.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent zdarz) {
				EventQueue.invokeLater(new Runnable() {
					@Override
					public void run() {
						new MyFrameZadanie();
					}
				});
			}
		});

		bStart.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tPrzebiegZadaniaDisplayArea.setText("");
				otwarteZadanie.startCounter();
				ModelZadan.aktualizujListeZadan(); // dopisuję
				tResultDisplay.setText(Zadanie.wyswietlZadaniaDzisiejsze());
				fDayStatus.setText(otwarteZadanie.dayTaskStatusUpdate());
				tPrzebiegZadaniaDisplayArea.setText(otwarteZadanie.wyswietlPrzebiegZadaniaMeldunek());
				ustawPrzyciskiPoStarcie();
			}


			private void ustawPrzyciskiPoStarcie() {
				bStart.setEnabled(false);
				fName.setEnabled(true);
				bStop.setEnabled(true);
				bPauza.setEnabled(true);
				bStopStart.setEnabled(true);
			}
		});

		fName.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent zdarz) {	
				otwarteZadanie.wyswietlMeldunekONadaniuOpisu(fName.getText());
				Zadanie.aktualneZadanie.taskName = fName.getText();
				tPrzebiegZadaniaDisplayArea.setText(otwarteZadanie.wyswietlPrzebiegZadaniaMeldunek()); // SOLVED 4
				
				if (!Zadanie.opisy.contains(Zadanie.aktualneZadanie.taskName)) {
					Zadanie.opisy.add(Zadanie.aktualneZadanie.taskName);
				}

				ModelZadan.aktualizujListeZadan(); // dopisuję
				tResultDisplay.setText(Zadanie.wyswietlZadaniaDzisiejsze());
			}
		});



		bStopStart.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent zdarz) {
				otwarteZadanie.stopCounter();
				tPrzebiegZadaniaDisplayArea.setText("");
				otwarteZadanie.startCounter();
				ModelZadan.aktualizujListeZadan(); // dopisuję
				tResultDisplay.setText(Zadanie.wyswietlZadaniaDzisiejsze());
				fDayStatus.setText(otwarteZadanie.dayTaskStatusUpdate());
				tPrzebiegZadaniaDisplayArea.setText(otwarteZadanie.wyswietlPrzebiegZadaniaMeldunek());
				try {
					Program.zapiszWszystkoDo();
				} catch (IOException e) {
					e.printStackTrace();
				}
	
			}

		});

		bStop.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ustawPrzyciskiPoStopie();
				otwarteZadanie.stopCounter();
				
				ModelZadan.aktualizujListeZadan(); // dopisuję
				tResultDisplay.setText(Zadanie.wyswietlZadaniaDzisiejsze());
				fDayStatus.setText(otwarteZadanie.dayTaskStatusUpdate());
				//tPrzebiegZadaniaDisplayArea.setText(otwarteZadanie.wyswietlPrzebiegZadaniaMeldunek());
				tPrzebiegZadaniaDisplayArea.setText("");
				ModelZadan.aktualizujListeZadan();
				try {
					Program.zapiszWszystkoDo();
				} catch (IOException ef) {
					ef.printStackTrace();
				}
		
			}

			private void ustawPrzyciskiPoStopie() {
				bPauza.setEnabled(false);
				bStop.setEnabled(false);
				bStopStart.setEnabled(false);
				bStart.setEnabled(true);
				fName.setEnabled(false);
			}
		});

		bPauza.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cmd = e.getActionCommand();
				if (PauseString.equals(cmd)) {
					otwarteZadanie.pauzeCounter();
					fDayStatus.setText(otwarteZadanie.dayTaskStatusUpdate());
					tPrzebiegZadaniaDisplayArea.setText(otwarteZadanie.wyswietlPrzebiegZadaniaMeldunek());
					ModelZadan.aktualizujListeZadan();
					ustawPrzyciskiPoPauzie();
				} else {
					otwarteZadanie.unpauzeCounter();
					ustawPrzyciskiPoUnPauzie();
					fDayStatus.setText(otwarteZadanie.dayTaskStatusUpdate());
					tPrzebiegZadaniaDisplayArea.setText(otwarteZadanie.wyswietlPrzebiegZadaniaMeldunek());
					ModelZadan.aktualizujListeZadan();
				}
				ModelZadan.aktualizujListeZadan(); // dopisuję
				tResultDisplay.setText(Zadanie.wyswietlZadaniaDzisiejsze());
			}

			private void ustawPrzyciskiPoPauzie() {
				fDayStatus.setText("---czas spauzowania: " + otwarteZadanie.terminSpauzowania);
				bPauza.setText(PlayString);
				bStop.setEnabled(false);
				bStopStart.setEnabled(false);
			}

			private void ustawPrzyciskiPoUnPauzie() {
				bPauza.setText(PauseString);
				bStop.setEnabled(true);
				bStopStart.setEnabled(true);
			}
		});
		
		bWyswietlZadania.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cmd = e.getActionCommand();
				if (WszystkieString.equals(cmd)) {
					tResultDisplay.setText(Zadanie.wyswietlZadaniaGrupowanePoDacie());
					bWyswietlZadania.setText(DzisiejszeString);
					ModelZadan.aktualizujListeZadan();
				} else {
					ModelZadan.aktualizujListeZadan(); // dopisuję
					tResultDisplay.setText(Zadanie.wyswietlZadaniaDzisiejsze());
					ModelZadan.aktualizujListeZadan();
					bWyswietlZadania.setText(WszystkieString);
				}

			}
		});
		
		bOpenGeneratePDF.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Program.openPDF();
			}
		});
		
		
		lZadaniaLocal.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent arg0) {
				if (!arg0.getValueIsAdjusting()) {
					wybraneZadanie = (Zadanie) lZadaniaLocal.getSelectedValue();
					if (wybraneZadanie != null) {
						bWyswietlMetryczke.setEnabled(true);
						MyFrameZadanie.ogladaneWlasnieZadanie = wybraneZadanie;
					} else {
						bWyswietlMetryczke.setEnabled(false);
					}
				}
			}
		});
	}


	private void ustawOknoNaStart() {
		
		ModelZadan.aktualizujListeZadan();
		ModelZadan.ustawParametryWyswietlaniaListyZadan(lZadaniaLocal);	
		String dzisiejszaData = Program.dateFormat.format(new Date());
		
		fName.setEnabled(false);
		bStop.setEnabled(false);	
		bStopStart.setEnabled(false);
		bPauza.setEnabled(false);
		
		fDayStatus.setEditable(false);
		fDayStatus.setText("Dziś mamy: " + dzisiejszaData + " Wykonanych dziś zadań: " + Zadanie.getIleZadanDoneToday());
		
		tPrzebiegZadaniaDisplayArea.setEditable(false);
		tPrzebiegZadaniaDisplayArea.setText("Dane programu będą przechowywane tu: "+Program.ekstensjaPath +".\nW tym oknie będziesz widzieć logi przebiegu zadania");
		binPath.setText("Dane programu są tu: "+Program.ekstensjaPath);

		bWyswietlMetryczke.setEnabled(false);

		tResultDisplay.setEditable(false);
		tResultDisplay.setText(Zadanie.wyswietlZadaniaDzisiejsze()); // gdy brak zadań w systemie, wyświetla instrukcję

		
		add(bStart);
		add(fName);
		add(bStop);
		add(bStopStart);
		add(bPauza);
		add(otwarteZadanie);
		add(binPath);
		add(fDayStatus);
		
		add(tPrzebiegZadaniaDisplayArea);
		
		add(lZadaniaLocal);
		add(bWyswietlMetryczke);
		
		add(tResultDisplay);
		
		add(bWyswietlZadania);
		add(bOpenGeneratePDF);
	}
}